package com.video.dao.http;

import com.video.utils.constant.UrlConstant;
import okhttp3.*;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.io.IOException;

public class DeepSeekTTS {

    public static void main(String[] args) {
        String text = "你好，欢迎使用 DeepSeek 语音合成服务！";
        String voice = "zh-CN-XiaoxiaoNeural"; // 选择音色
        double speed = 1.0; // 语速
        double pitch = 0.0; // 音调
        String style = "cheerful"; // 情感风格：欢快
        String outputFilePath = "output.mp3";

        try {
            generateTTS(text, voice, speed, pitch, style, outputFilePath);
            System.out.println("语音文件已生成: " + outputFilePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void generateTTS(String text, String voice, double speed, double pitch, String style, String outputFilePath) throws IOException {
        OkHttpClient client = new OkHttpClient();

        // 构建请求体
        JsonObject requestBody = new JsonObject();
        requestBody.addProperty("text", text);
        // 设置音色
        // 中文音色
        // 音色名称	            性别  风格	    适用场景
        // zh-CN-XiaoxiaoNeural	女声  标准	    通用场景，自然流畅
        // zh-CN-YunxiNeural	男声  标准	    通用场景，沉稳有力
        // zh-CN-YunyangNeural	男声  新闻播报	新闻、公告、正式场合
        // zh-CN-XiaohanNeural	女声  情感化	    广告、故事讲述
        // zh-CN-XiaomengNeural	女声  童声	    儿童内容、动画配音
        // 英文音色
        // 音色名称	            性别  风格	    适用场景
        // en-US-JennyNeural	女声  标准	    通用场景，自然流畅
        // en-US-GuyNeural	    男声  标准	    通用场景，沉稳有力
        // en-US-AriaNeural	    女声  情感化	    广告、故事讲述
        // en-US-DavisNeural	男声  新闻播报	新闻、公告、正式场合
        // en-US-AnaNeural	    女声  童声	    儿童内容、动画配音
        requestBody.addProperty("voice", voice);
        requestBody.addProperty("speed", speed); // 设置语速
        requestBody.addProperty("pitch", pitch); // 设置音调
        // 设置情感风格
        // 情感风格	    描述	        适用场景
        // cheerful	    欢快、活泼	广告、儿童内容、节日祝福
        // sad	        悲伤、低沉	故事讲述、情感表达
        // angry	    愤怒、激动	戏剧、冲突场景
        // calm	        平静、温和	冥想、放松场景
        // serious	    严肃、正式	新闻播报、公告
        // friendly	    友好、亲切	客服、教育内容
        // excited	    兴奋、激动	促销、活动宣传
        requestBody.addProperty("style", style);

        // 构建请求
        Request request = new Request.Builder()
                .url(UrlConstant.DEEP_SEEK_TTS_API_URL)
                .post(RequestBody.create(requestBody.toString(), MediaType.parse("application/json")))
                .addHeader("Authorization", "Bearer " + UrlConstant.DEEP_SEEK_API_KEY)
                .addHeader("Content-Type", "application/json")
                .build();

        // 发送请求并保存音频文件
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                throw new IOException("请求失败: " + response.code() + " " + response.message());
            }

            // 将响应保存为音频文件
            byte[] audioData = response.body().bytes();
            java.nio.file.Files.write(java.nio.file.Paths.get(outputFilePath), audioData);
        }
    }
}
